package com.redstar.day04_doublepointer;

/**
 * 一个有序数组 nums，原地删除重复出现的元素（即只能在本数组中操作，不能使用额外的空间），
 * 使得每个元素只出现一次，返回删除后数组的长度
 *
 * 例如：[1，1，2，2，3] 输出 3
 *
 * 首先我们注意数组时有序的，所以相同的元素一定是连续的。此时我们使用快慢指针，当快慢指针元素相同时，
 * 我们只移动快指针。当两指针元素不相同时，将慢指针前进一步，再将快指针的值赋值给慢指针，然后继续循环，
 * 直到下次快慢指针的值不相同
 *
 * @author lihongxing
 * @date 2021/04/26 17:36
 */
public class Test {


    private static int removeDuplicates(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int slow = 0;
        for (int fast = 1; fast < nums.length; fast++) {
            if (nums[slow] != nums[fast]) {
                slow++;
                nums[slow] = nums[fast];
            }
        }
        //此时慢指针的值就是删除重复元素的数组的最后一个元素的索引了，那么删除重复元素的数组的长度就是索引值+1
        return slow + 1;
    }


    //{0,0,1,1,1,  2,2,3,3,4}
    //{0,1,1,1,1,  2,2,3,3,4}
    //{0,1,2,1,1,  2,2,3,3,4}
    //{0,1,2,3,1,  2,2,3,3,4}
    //{0,1,2,3,4,  2,2,3,3,4}  最终的数组
    public static void main(String[] args) {
        int[] nums = {0,0,1,1,1,2,2,3,3,4};
        System.out.println(removeDuplicates(nums));

    }








}
